/**
 * @file task_center.h
 * @author chushang (email:chushangcs@163.com)
 * @brief 首先调用Task_Init初始化任务，然后在定时器中断里调用Task_Center，主循环中调用Task_Run
 * @version 0.1
 * @date 2025-07-12
 *
 * @copyright Copyright (c) 2025
 *
 */

#ifndef __TASK_CENTER_H
#define __TASK_CENTER_H

#include "stdint.h"

#define MAX_TASK_NUM 2 // 最大任务数量

// 任务运行状态
typedef enum
{
    TASK_ABORTED, // 任务需要终止
    TASK_RUNNING, // 任务需要运行
} TaskState;

// 用来配置Task结构体
typedef struct task_config
{
    uint16_t run_period;        // 运行周期，单位ms
    void (*run_callback)(void); // 任务的运行函数
} TaskConfig;

// 任务结构体
typedef struct task
{
    TaskState run_state;        // 运行状态
    uint16_t  run_count;        // 运行时长，单位ms
    uint16_t  run_period;       // 运行周期，单位ms
    void (*run_callback)(void); // 任务的运行函数
} Task;

Task *Task_Init(TaskConfig *tc);
void  Task_Center(void);
void  Task_Run(void);

#endif // !__TASK_CENTER_H